; 2021-05-08 ; First attempt at recreating source code from poor-quality dot-matrix OCR. ; Errors are highly likely! ; This has not been put through an assembler yet, ; which would catch many errors. ; MODULE 'BASSYS'; PAGE 69; % MONITOR FUER Z8000 % RDK 1980-03-06 WORD: 0; WORD: 4000H; % FCW RESET WORD: START1; % PC RESET WORD: 0; WORD: 4000H % PSEUDO CODE WORD: PSEUDO; WORD: 4000H; WORD: SYSCALL; % SYSTEM CALL START1: LD R15,#1FFE; % SYSTEM SP LD R1,0; % FCW INIT LD FCWSTO,R1; % NORM MODE LD R1,1F00H; % USER STACK LD REGSTO(30),R1; LD R1,98H; OUT $FF06,R1; % INIT UART LD R1,0BH; OUT #FFF0,R1; LD R1,0DH; % TESTAUSGABE UART OUT #FF00,R1; % OK NUN INIT SP ETC LD R1,0; LDCTL PSAPOFF,R1; LD R1,#17FE; LDCTL NSPOFF,R1; % STACK LADEN LOOP: CALR SPACE; CALR SPACE; LD RS,^TXT1; CALR PRINT11; LOOPMAIN: LD R1,'>'; CALR CO; CALR ECHO; % IN R1 ZEICHEN CP R1,‘L‘; % LOAD JP ZR,LADEN; CP R1,'B'; % BASIC STARTEN JP ZR,START; CP R1,'N'; JP ZR,RSTART; CP R1,'D'; % DISPLAY A TO B JP ZR,DISPLAY; CP R1,'E'; % ENTER JP ZR,ENTER; CP R1,'G'; % GO JP ZR,GO; CP R1,'R'; JP ZR,REGISTER; CP R1,';'; CALR CO; CALR CRLF111; JR LOOPMAIN; LADEN: % LADEN BINAER % NACH ADR EXPR CALR EXPR11; % RS ADDRESSE % WARTEN NULL FF FOLGE LPLAD1: CALR CI; CP R1,O; JR NZ,LPLAD1; LPLAD1; CALR CI CP R1,0FFH; JP NZ,LPLAD2; LPLAD3: CALR CI; CP R1,0FFH; JP ZR,LPLADB; CP R1,O; JP NZ,LPLAD1; % FEHLER % LAENGE FIRST % 0 FF FF FF 0 LL LH DATA CALR CI; LDB RL6,RL1; CALR CI; LDB RH6,RL1; MLPLAD; CALR CI; LDB R5^,RL1; INC R5,1; DEC R6,1; JP NZ,MLPLAD; CALR CRLF111; LD R1,R5; CALR PRRISP; CALR CRLF111; JP LO0PMAIN; GO: CALR EXPR11; LD R14,RS; LD R1,FCWSTO; LDCTI FCW,R1 % FCW LADEN!!! LDM R0,REGSTO,14; % NUR R0 BIS R13 !! JP R14^; REGISTER: % NICHT ALLE GUELTIG % FALLS NICHT DIRECT % ZU REG SPRG CALR CRLF111; % REGST0 AUSG. 0 BIS 15 LD R3,^TXTFCW; CALR PRINT11; LD R1,FCWSTO, CALR PRR1SP; CALR CRLF111; LD R3,^TXT2; CALR PRINT11; LD R4,^REGST0; LD R5,8; LOPA: LD R1,R4^; % REGS CALR PRR1SP, INC R4,2; DEC R5,15 JR NZ,LOPA; PUSH R15^,R4; CALR CRLF111; LD R3,^TXT3; CALR PRINT11; POP R4,R15^; LD R5,8; LOPB: LD R1,R4^; CALR PRRISP; INC R4,2; DEC R5,1; JR NZ,LOPB; CALR CRLF111; JP LOOPMAIN; TXT2: WORD: 'R1 R2 R3 R4 R5 R6 R7 '; WORD: 0D0AH; WORD: 0; TXT3: WORD: 'R8 R9 R10 R11 R12 R13 R14 R15'; WORD: 0D0AH; WORD: 0; DISPLAY: % A TO B CALR EXPFCL1; % IN R5 IST PARAM 1 LD R6,R5; CALR EXPR11; % R6 ANFADR R5 ENDADR CALR CRLF111; MLOOP1: LD R1,R6; CALR PRRISP CALR SPACE; LD R3,8; % ACHT WERTE PRO ZEILE MLOOP2: LD R1,R6^; CALR PRFLISP; INC R6,2; % WORD DEC R3,1; JR NZ,MLOOP2; % ACHTMAL CALR CRLF111; CP R5,R6; % BEI CARRY STOP JR NC,MLOOP1; CALR CRLF111; JP LOOPMAIN; % ENTER ADR A,CR ENDE -, ENTER: CALR EXPR11; LD R6,R5; % R6 IST ADR COUNTER ELOOP: LD R1,R6; % ADR AUSGEBEN CALR PRRISP; CALR SPACE; LD R1,R6^; % INHALT CALR PRRISP; CALR EXPR11; % WERT HOLEN CP R2,'-'; JR ZR,MINUS; CP R2,'.'; % MON MODIFY JR ZR,C0NTSK; % SKIP STORE CP R2,1; JP NZ,L0OPMAIN; LD R6^,R5; % ABBSPEICHERN CONTSFC: LD R1,R6^; CALR PRTR1; CALR CRLF111; INC R6,2; % WORD JR FLBBP; MINUS: CALR CRLF111; DEC R6,2; JR ELOOP; TXTFCW: WORD: FCW; WORD: 0; CRLF111: LD R1,0DH; CALR CO; LD R1,0AH; JP CO; EXPR11: % GET 16BIT INTO R5 LD R5,O; EX00: CALR ECHO; % GET CHAR TO R1 EXIT: CALR NIBBLE; % WANDELN JR CY,EX22; % TERMINATOR IN R1 SLA R5,4; OR R5,R1; % R1 OR R5->R5 JR EX00; NIBBLE: AND R1,0FFH; LD R2,R1; % RETTEN SUB R1,'0'; RET CY; CP R1,'Q'-'; COMFLG CY; RET CY; CP R1,1O; COMFLG CY; RET NC; SUB R1,'A'-'9’-1; CP R1,10; RET; EX22: RET; PRRISP: CALR PRTR1; JP SPACE; ECHO: CALR CI; CALR CO; CPB RL1,0DH; RET NZ; LD R1,0AH; JP CO; SPACE: LD R1,' '; JP CO; % PRINT11 (R3) DRK BIS 0 PRIN11: LD R4,R3^; % LOAD 2 BYTES CP R4,O; RET ZR; % ZERO DANN ENDE LDB RL1,RH4; CALR CO; LDB RL1,RL4; CALR CO; INC R3,2; JR PRINT11; TXT1: WORD: 'Z8000 RDK MONITOR. 1.0'; WORD: 0D0AH; WORD: 0; PRTR1: % DRUCKE R1 AUS % SEDEZIMAL PUSH R15^,R1; LDB RL1,RH1; % FIRST HIGH CALR NMOLIT; POP R1,R15^; CALR NMOUT; RET; NMOUT: PUSH R15^,R1; RRB RL1,2; RRB RL1,2; CALR OUTCH; POP R1,R15^; AND RL1,0FH; ADD R1,'0'; CP R1,'9'+1; JR CY,OUTCH; ADD R1,'A'-'9'-1; OUTCH: JP CO; PSEUDO: POP INSTRW,R15^; POP FCWST0,R15^; POP PCBT0,R15^; LD R3,^TXTPS; CALR PRINT11; LD R1,INSTRW; CALR PRRISP; LD R1,PCSTO; DEC R1,2; % GENAUER STAND CALL PRRISP; CALR CRLF11; JP LOOPMAIN; LDM REGSTO,R0,16; % SAVE REGS POP R2,0FFH; % IDENT AND R2,0FFH; POP FCWST0,R15^; % DIREKT POP PCSTO,R1,51'; % ADR NORM/SYS CP R2,1; % CI NACH R1 JP NZ,SK1; CALR CIS JR FINA; CP R2..2; % CO VON R1 JR NZ,SK2; CALR CO; JR FINA; SK2: CP R2,3; JR NZ,SK3 CALR CSTSA; JR FINA; SK3: CP R2,255; % TRAP JP ZR,REGISTER; CP R2,0 % RSTART JP ZR,LOOPMAIN; PUSH R15^,R2; LD R3,^TXTBR; CALR PRINT11; POP R2,R15^; LD R1,R2; CALR PRRISP; LD R1,PCST0; DEC R1,R2; % GENAUER STAND CALR PRRISP; CALR CRLF111; JP LOOPMAIN; FINA; LD R0,FCWSTO; LDCTL FCW,R0; LD R0,REGSTO; % HIER R0 ZURUECK PUSH R15^,PCST0; % AUF NORM STK RET; % ODER SYS TXTBR: WORD: '*SYS ERR NR AT '; WORD: 0; TXTPSX: WORD: '*PS INSTR AT '; WORD: 0; CSTSA: IN R1,#FF02; AND R1,8; RET; % ZERO FALLS KEIN ZEICHEN CI: % R1,TEMP IN R1,#FF02; AND R1,8; JR ZR,CI; IN R1,#FF00; AND R1,0FFH; % PAR NEC ETC RET ; CO: PUSH R15',R2; CO1: IN R2,#FF02; AND R2,#10; JR ZR,C01; POP R2,R15^; OUT #FF00,R1; RET; %***************************** % RDKBASIC FUER Z8000 * % 1980-03-02 V 1 . 0 * % COPYRIGHT 1980 * % BY ROLF-DIETER KLEIN * %***************************** % DEFINITIONEN % R1 IST AKKU % R4 IST HL % R5 IST DE % R6 IST BC JP START; CI11: SC 1; RET; SC 2; RET; CSTS: SC 3; RET; COMP: % HL MIT DE MGL CP R4,R5; RET; IGNB: LDB RL1,R5^; CPB RL1,' '; RET NZ; INC R5,1: % BYTE ZUGRIFF JR IGNB; FINI: POP R1,RI5^; % DUMMY CALR FIN; JP QWHAT; TSTV: CALR IGNB; SUBB RL1,'^OH; RET CY; JR NZ,TV1; INC R5,1; % BYTE CALR PARN; ADD R4,R4; JP CY,QHOW; PUSH R15^,R5; EX R5,R4; CALR SIZE; CP FH,RS; JP CY,QSORRY LD R4,TXTXEND; SUB R4,R5; POP RS,R15^; RET ; TV1: CPB RL1,1BH; COMFLG CY; RET CY; INC R5,1; LD R4,^VARBGN; LDB RH1,0; RLC R1,1; ADD R4,R1; RET; TSTC: EX R4,R15^; CALR IGNB; CPB RL1,R4^; JR ZR,TC3; INC R4,2; LD R4,R4^; DEC R4,2; % ZACHTLING DISLP BYTE ADJ!!!! DEC R5,1; TC2: INC R5,1; INC R4,2; EX R4,R15^; RET; TC3: INC R4,2; JR TC2; TSTNUM: CLR R4; LDB RH6,0; CALR IGNB; TN1: CPB RL1,'0'; RET CY; CPB RL1,3AH; RET NC; LDB RL1,0F0H; ANDB RL1,RH4; JP NZ,QHOW; INCB RH6,1; PUSH R15^,R6; LD R6,R4; ADD R4,R4; ADD R4,R4; ADD R4,R6; ADD R4,R4; LDB RL1,R5^; INC R5,1; ANDB RL1,0FH; LDB RH1,0 ADD R4,R1 P0P R6,R15^; LDB RL1,R5^; JP PL,TN1; QHOW: PUSH R15^,R5; AHOW: LD R5,^HOW; JP ERROR; CONST CRLF1=0D0AH; HOW: WORD: 'HOW?'; WORD: CRLF1; OK: WORD: 'READY'; WORD: CRLF1; WHAT: WORD: 'WHAT?'; WORD: CRLF1; SORRY: WORD: 'SORRY'; WORD: CRLF1; %*************************** % HAUPTPR0GRAMM LIEST EINE * % BENUTZERZEILE EIN * % ************************** RSTART: LD R15,^STACK; ST1: CALR CRLF; LD R5,^OK; LDB RL1,0; CALR PRTSTG; LD R4,^ST2+2; % TRICK TO 0 LD CURRNT,R4 LD R4,O; LD LOPVAR,R4; LD STKGOS,R4, LDB RL1,'>'; CALR GETLN; PUSH R15^,R5; LD R5,BUFFER; CALR TSTNUM; CALR IGNB; P0P R6,R15^; % STK OR RR4,R4; JP ZR,DIRECT; DEC R5,1; LDB R5^,RH4; DEC R5,1; LDB R5^,^RL4; PUSH R15^,R6; PUSH R15^,R5; LDB RL1,RL6; SUBB RL1,RL5; PUSH R15^,R1 CALR FNDLN; PUSH R15^,R5; JR NZ,ST4 PUSH R15^,R5; CALR FNDNXT; POP R6,R15^; LD R4,TXTUNF; CALR MVUP; LD TXTUNF,R6; ST4: POP R6,R15^; LD R4,TXTUNF; POP R1,R15^; PUSH R15^,R4; CPB RL1,3; JP ZR,RSTART; LDB RH1,0; ADD R4,R1; LD R5,TXTEND; CP R4,R5; JP NC,SORRY; LD TXTUNF,R4; POP R5,R15^; CALR MOVDWN; POP R5,R15^; POP R4,R15^; CALR MVUP; JP ST3; % MAKRO DEFINITION FUER TSTC MACRO TESTC CHAR,RELA; BEGIN CALR TSTC; BYTE; CHAR,CHAR; WORD: RELA END; % *********************** % NEW STOP RUN GOTO UPR * % *********************** NEW: CALR ENDCHK; LD R4,^TXTBGN; LD TXTUNF,R4; STOP: CALR ENDCHK; JP RSTART; RUN: CALL ENDCHK; LD R5,^TXTBGN; CLR R4 CALR FNDLP; JP CY,RSTART; RUNTSL: LD CURRENT,R5; INC R5,2; % !!!!! RUNSML: CALR CONT; LD R4.^TAB2-1; % ! JP EXEC; GOTO: CALR EXPR; PUSH R15^,R5; CALR ENDCHK; CALR FNDLN; JP NZ,AHOW; POP R1,R15^, JR RUNTSL; % ***************** % LIST PRINT LIPR * % ***************** LIST1: CALR TSTNUM; CALR ENDCHK; CALR FNDLN, LS1: JP CY,RSTART; CALR PRTLN; CALR CONT; CALR FNDLP; JR LSI; PRINT: LDB RL6,6; TESTC ';',PR2; CALR CRLF; JP RUNSML; PR2: TESTC 0DH,PRO; CALR CRLF; JP RUNNXL ; PR0: TESTC '#',PR1 CALR EXPR; LDB RL6,RL4; JP PR3; PR1: CALR QTSTG; JR PR8; PR3: TESTC ",",PR6; CALR FIN; JR PR0; PR6: CALR CRLF; CALR FINI; CALR EXPR; PUSH R15^,R6; CALR PRTNUM; POP R6,R15^; JP PR3; %******************* % GOSUB RETURN UPR * %******************* GOSUB: CALR PUSH1; CALR EXPR; PUSH R15^,R5; CALR FNDLN; JP NZ,AHOW PUSH R15^,CURRNT; PUSH R15^,STKGOS; CLR LOPVAR LD STKGOS,R15; JP RUNTSL; RETURN; CALR ENDCHK; LD R4,STKGOS; DR R4,R4; JP ZR,QWHAT; LD R15,R4; % !!! POP STKG0S,R15^; POP CURRNT,R15-^; POP R5,R15^; CALR POPA; CALR FINI; %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx % FOR NEXT UPR * %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx FOR1: CALR PUSHA; CALR SETVAL; DEC R4,R1 LD LOPVAR,R4; LD R4,^TAB5-1; JP EXEC; FR1: CALR EXPR; LD LOPLMT,R4; LD R4,^TAB6-1; JP EXEC; FR2: CALR EXPR; JR FR4: FR3 LD R4,1; FR4: LD LOPINC,R4; FR5: LD R4,CURRNT; LD LOPLN,R4; LD LOPPT,R5; LD R6,0AH; LD R5,LOPVAR; LD R4,R15; JR SKIP1; FR7: ADD R4,R6; SKIP1: LDB RL1,R4^; INC R4,1; ORB RL1,R4^; JR ZR,FR8; LDB RL1,R4^; DEC R4,1; CPB RL1,RL5; JR NZ-FRZ; LDB RL1,R4^; CPB RL1,RH5; JR NZ,FR7; EX R4,R5; LD R6,R15; LD R4,0AH; ADD R4,R5; CALR MVDOWN' FR8: LD R4,LOPPT; EX R4,R5; CALR FINI; NEXT: CALR TSTV; JP CY,QWHAT; LD VARNXT,R4; NX0: PUSH R15^,R5; EX R4,R5; LD R4,LOPVAR; OR R4,R4; JR ZR,AWHAT; CP R4,R5; JR ZR,NX3; POP R5,R15^; CALR POPA; LD R4,VARNXT; JR NX0; NX3: LDB RL5,R4^; INC R4,1; LDB RH5,R4^; LD R4,LOPINC; PUSH R15^,R4; LDB RL1,RH4; ADD R4,R5; XORB RL1,RH5; LDB RL1,RH5; JR MI,NX4; XORB RL1,RH4; JR MI,NX5; NX4: EX R4,R5; LD R4,LOPVAR; LDB R4^,RL5; INC R4,1; LDB R4^,RH5; LD R4,L0PLMT; POP R1,R15^; ORB RH1,RH1; % SWAP? JR PL,NX1; EX R4,R5; NX1: CALR CKHLDE; POP R5.R15^; JR CY,NX2; LD R4,LDPLN; LD CURRNT,R4; LD R4,LOPPT; EX R4,R5; CALR FINI; NX5: POP R4,R15^; POP R5,R15^; NX2: CALR P0PA; CALR FINI; %*********************** % REM IF INPUT LET UPR * %*********************** REM: CLR R4; JR IFFR; IFF: CALR EXPR; IFFR: OR R4,R4; JP NZ,RUNSML; CALR FNDSKP; JP NC,RUNTSL; JP RSTART; INPERR: LD R15,STKINP; POP R4,R15^; POP R5,R15^; POP R5,R15^; INPUT: IP1: PUSH R15^,R5; CALR QTSTG; JR IP2; CALR TSTV; JR CY,IP4; JR IP3; IP2: PUSH R15^,R5; CALL TSTV; JP CY,QWHAT; LDB RL1,R5^; LDB RL6,RL1; SUBB RL1,RL1; LDB R5^,RL1; PHP R5,R15^; CALR PRTSTG; LDB RL1,RL6; DEC R5,1; LDB R5^,RL1; PUSH R15^,R5; EX. R4,R5; LD R4,CURRNT; PUSH R15^,R4; LD R4,^IP1; LD CURRNT,R4; LD STKINP,R15; PUSH R15^,R5; LDB RL1,':'; CALR GETLN; LD R5,BUFFER; CALR EXPR; CALR CONT; pnp R5,R15^; EX R4,R5; LDB R4^,RL5; INC R4,1; LDB R4^,RH5; POP R4,R15^; LD CURRNT,R4; POP R5,R15^; POP R1,R15^; TESTC '.',IP5; JR XP1; IP5: CALR FINI; DEFLT: LDB RL1,R5^; CPB RL1,0DH; JR ZR,LT1; LET: CALR SETVAL; TESTC ',',LT1; JR LET; LT1: CALR FINI; %*********** % EXPR UPR * %*********** EXPR: CALR EXPR2; PUSH R15^,R4; EXPR1: LD R4,^TAB8-1; JP EXEC; XP11: CALR XP18; RET CY; LDB RL4,RL1; RET; XP12: CALR XP18; RET ZR; LDB RL4,RL1; RET; XP13; CALR XP18; RET ZR; RET CY; LDB RL4,RL1; RET: XP14: CALR XP18; LDB RL4,RL1; RET ZR; RET CY; LDB RL4,RH4; RET; XP15: CALR XP18; RET NZ; LDB RL4,RL1 ; RET: XP16: CALR XP18; RET NC; LDB RL4,RL1; RET; XP17; POP R4,R15^; RET ; XP18: LDB RL1.RL6; POP R4,R15^; POP R6,R15^; PUSH R15^,R4; PUSH R15^,R6; LDB RL6,RL1; CALR EXPR2; EX R4,R5; EX R4,R15^; CALR CKHLDE; POP R5,R15^; CLR R4; LDB RL1,1; RET; EXPR2: TESTC '-',XP21; CLR R4; JR XP26; XP21: TESTC '+',XP22; XP22: CALR EXPR3; XP23: TESTC '+',XP25; PUSH R15^,R4; CALR EXPR3; XP24: EX R4,R5; EX R4,R15^; LDB RL1,RH5; ADD R4,R5; XORB RL1,RH4; POP R5,R15^; JR MI,XP23; XORB RL1,RH4; JP PL,XP23; JP QHOW; XP25: TESTC '-',XP42; PUSH R15^,R4; CALR EXPR3; CALR CHGSGN; JP XP24 EXPR3: CALR EXPR4; XP31: TESTC '*',XP34; PUSH R15^,R4; CALR EXPR4; LDB RH6,0; CALR CHKSGN; EX R4,R15^; CALR CHKSGN; EX R4,R15^; EX R4,R15^; CLR R8; LD R9,R4; MULT RR8,R5; LD R9,R9; OR R8,R8; JP NZ,AHOW; JR XP35; XP34: TESTC '/',XP42; PUSH R15^,R4; CALR EXPR4; LDB RH6,0; CALR CHKSGN; EX R4,R15^; CALR CHKSGN; EX R5,R15^; OR R5,R5; JP ZR,AHOW; PUSH R15^,R6; CALR DIVIDE; LO R4,R6; POP R6,R15^; XP35: POP R5,R15^; ORB RH4,RH4; JP MI,QHOW; ORB RH6,RH6; JR PL,XP31; CALR CHGSGN; JR XP31; EXPR4: LD R4,^TAB4-1; JP EXEC; CALR TSTV; JR CY,XP41; LDB RL1,R4^; INC R4,1; LDB RH4,R4^; LDB RL4,RL1; RET; CALR TSTNUM; ORB RH6,RH6; RET NZ; PARN: TESTC '(',XP43; CALR EXPR; TESTC ')',XP43; XP42: RET; XP43: JP QWHAT; RND: CALR PARN; JP MI,QHOW; OR R4,R4; JP ZR,QHOW; PUSH R15^,R5; PUSH R15^,R4; LD R4,RANPNT; LD R5,^LSTR0M; CP R4,R5; JP CY,RA1; LD R4,^START; RA1: LDB RL5,R4^; INC R4,1; LDB RH5,R4^; LD RANPNT,R4; POP R4,R15^; EX R4,R5; PUSH R15^,R6; CALR DIVIDE; POP R6,R15^; POP R5,R15^; INC R4,1; RET; ABB1: CALR PARN; DEC R5,1; CALR CHKSGN; INC R5,1; RET; SIZE: LD R4,TXTEND; BUB R4,TXTUNF; RET; %************************************ % DIVIDE SUBDE CHKBGN CKHLDE CHGSGN * %************************************ DIVIDE: % HL/DE RES IN BC REMAINDER IN HL LD R9,R4; CLR R8; DIU RR8,R5; LD F6,R9; LD R4,R8; RET; CHKSGN: ORB RH4,RH4 RET PL; CHGSGN: RET ZR; LDB RL1,RH4; NEG R4; XORB RL1,RH4; JP PL,QHOW; XORB RH6,80H; RET; CHKHLDE: LDB RL1,RH4; XORB RL1,RH5; JR PL,CK1; EX R4,R5; CK1: CP R4,R5; RET ; %************************* % SETVAL IN ENDCHK ERROR * %************************* SETVAL: CALR TSTV; JP CY,QWHAT; PUSH R15^,R4; TESTC '=',SV1; CALR EXPR; LD R6,R4; POP R4,R15^; LDB R4^,RL6; INC R4,1; LDB R4^,RH6; RET: SV1: JP QWHAT; FIN: TESTC ';',FI1; POP R1,R15^; JP RUNSML; FI1: TESTC 0DH,FI2; POP R|,R15'h; JP RUNNXL; FI2: RET; ENDCHK: CALR IGNB; CPB RL1,0DH; RET ZR; QWHAT: PUSH R15^,R5; AWHAT: LD R5,^WHAT; ERROR: SUBB PLI,RL1; CALR PRTSTG; POP R5,R15^; LDB RL1,R5^; PUSH R15^,R1; SUBB RL1,RL1; LDB R5,RL1; LD R4,CURRNT; PUSH R15^,R4; LDB RL1,R4^; INC R4,1; ORB RL1,R4^; POP R5,R15^; JP ZR,RSTART; LDB RL1,R4^; ORB RL1,RL1; JP MI,INPERR; CALR PRTLN; DEC R5,1; POP R1,R15^; LDB R5^,RL1; LDB RL1,'?'; CALR OUTC; SUBB RL1,RL1; CALR PRTSTG JR RSTART; QSORRY: PUSH R15^,R5; ASORRY: LD R5,^SORRY; JP ERROR; %****************** % GETLN FNDLN UPR * %****************** GETLN: CALR OUTC; LD R5,BUFFER; GL1: CALR CHKIO; CPB RL1,1; % DEL ZEICHEN JR ZR,GL3; CALR OUTC; CPB RL1,0AH; JR ZR,GL1; ORB RL1,RL1; JR ZR,GL4; CPB RL1,1BH; % ESC JR ZR,GL4; LDB R5^,RL1; INC R5,1; CPB RL1,0DH; RET ZR; LDB RL1,RL5; CALR CXBUFE; JR NZ,GL1; GL3: LDB RL1,RL5; CALR CXBUFA; JR ZR,GL4; DEC R5,1; LDB RL1,8; CALR OUTC; JR GL1; GL4: CALR CRLF; LDB RL1,0BH; JP GETLN; FNDLN: ORB RH4,RH4; Jp MI,QHOW; LD R5,^TXTBGN; FNDLP: FL1: PUSH R15^,R4; LD R5,^TXTUNF; DEC R4,1; CP R4,R5; POP R4,R15^; RET CY; LDB RL1,R5^; SUBB RL1,RL4; LDB RH6,RL1; INC R5,1; LDB RL1,R5^; SBCB RL1,RH4 JR CY,FL2; DEC R5,1; ORB RL1,RH6; RET; FNDNXT: INC R5,1; FL2: INC R5,1; FNDSKP: LDB RL1,R5^; CPB RL1,0DH; JR NZ,FL2; INC R5,1; JR FL1; % PRTSTQ GTBTC PRTN0N PRTLN UPR * %******************************** PRTSTG: LDB RL1,R5^; PS1: LDB R1:1,R5^; INC RR5,1; CPB RL1,RH6; RET ZR; CALR OUTC; CPB RL1,0DH; JR NZ,PSI; RET; QTSTC: TESTC '"',QT3; LDB RL1,22H; QT1: CALL PRTSTG; CPB RL1,0DH; POP R4,R15^; JP ZR,RUNNXL; QT2: LD R0,R4^; % VAR RESTURN INC R4,Z; AND R0,0F000H; CP R0,0E000H; % JR BEFEHL JP ZR,R4; INC R4,2; % SONST JP DANACH JP R4^; QT3: TESTC 27H,QT1; QT4: LDB RL1,27H; JR QT1; TESTC '<',QT5; LDB RL1,8DH; % CR OHNE LF CALL OUTC; POP R4,R15^; JR QT2; QT5: RET; PRTNUM: LDB RH6,O; CALL CHKSGN; JR PL,PNI; LDB RH6,'-'; DECB RL6,1; PN1: PUSH R15^,R5; LD R5,0AH; PUSH R15^,R5; DECB RL6,1; PUSH R15^,R6; PN2; CALR DIVIDE; OR R6,R6 JR ZR,PN3; EX R4,R15^; DECB RL4,1; PUSH R15^,R4; LD R4,R6; JR PN2; PN3: POP R6,R15^; PN4: DECB RL6,1; ORB RL6,RL6; JR MI,PN5; LDB RL1,' '; CALR OUTC; JR PN4; PN5: LDB RL1,RH6; ORB RH6,RH6; JR ZR,SKIP2; CALR OUTC; SKIP2: LDB RL5,RL4; PN6: LDB RL1,RL5; CPB RL5,0AH; POP R5,R15^; RET ZR; ADDB RL1,'0'; CALR OUTC; JR PN6; PRTLN: LDB RL4,R5^; INC R5,1; LDB RH4,R5^; INC R5,1; LDB RL6,4; CALR PRTNUM; LDB RL1,' '; CALR OUTC; SUBB RL1,RL1; CALR PRTSTG; RET ; % ************************ % MVUP MVDOWN POPA PUSHA * % ************************ MVUP: CP R4,R5 RET ZR; LDIB R6^,R5^,R0; JR MVUP MVDOWN: CP R5,R6; RET ZR DEC R5,1; DEC R4,1; LDB R4^,RL1; JR MVDOWN; POPA: POP R6,R15^; POP R4,R15^; LD LOPVAR,R4; JR ZR,PP1; POP LOPINC,R15^; POP LGPLMT,R15^; POP LOPLN,R15^; POP R4,R15^; LD LOPPT,R4; PP1: PUSH R15^,R6; RET; PUSHA: LD R4,^STKLMT; CALL CHKSGN; POP R6-R15^; LD R0,R15; ADD R4,R0; JP NC,QSORRY; LD R4,LOPVAR;; OR R4,R4; JR ZR,PU1; PUSH R15^,LOPPT; PUSH R15^,LOPLN; PUSH R15^,LGPLMT; PUSH R15^,LOPINC; LD R4,LOPVAR; PU1: PUSH R15^,R4; PUSH R15^,R6; RET; % ************ % OUTC CHKIO * % ************* START: LD R15,^STACK; LDB RL1,0FFH; INIT: LDB OCSW,RL1; CALR CRLF; SUBB RL1,RL1; LD R5,^MSG1; CALR PRTSTG; LD R4,^START; LD RANPRT,R4; LD R4,^TXTBGN; LD TXTUNF,R4; LD R4,^TXTE; LD TXTEND,R4; LD R4,^BUFA; LD BUFFER,R4; LD R4,^BUFE; LD BUFEND,R4; JP RSTART; CRLF: LDB RL1,0DH OUTC: PUSH R15^,R6; F*0SH R15^,R1; LDB RL1,OCBW; ORB RL1,RL1; JR NZ,OCB; POP R1,R15^; POP R6,R15^; RET; OC3: POP R1,R15^; PUSH R15^,R1; LDB RL6,RL1; LPT: CPB RL6,0DH; JR ZR,LINEF; HI: LDB RL1,RL6; CALR CO11; POP R1,R15^; POP R6,R15^; RET; LINEF: LDB RL1,0DH; CALR CO11; LDB RL6,0AH; JR HI; CHKIO: CALR CT11; ANDB RL1,7FH; CF*B RL1,2; JR NZ,CI1; COM OCSW; JR CHKIO; CI1: CPB RL1,3; RET NZ; JP RSTART; MSG1: WORD: 'RDK Z8000 BASIC 1.0 '; WORD: 0D0AH; %*********************** % TABELLEN DIRECT EXEC * %*********************** % % BYTE UND WORDS TAB1: BYTE: 'LIST',0; WORD: LIST1,; BYTE: 'RUN',0; WORD: RUN; BYTE: 'NEW',0; WORD: NEW; BYTE: 'BYE',0; WORD: BYE; BYTE: 'MEM',O; % NEU END WORD: END1; TAB2: BYTE: 'NEXT',0; WORD: NEXT; BYTE: 'LET',0; WORD: LET; BYTE: 'IF',0; WORD: IFF; BYTE; 'GOTO',0; WORD: GOTO; BYTE: 'GOSUB',0; WORD: GOSUB; BYTE: ’RETURN',0; WORD: RETURN; BYTE: 'REM',0; WORD: REM; BYTE: 'FOR',0; WORD: FOR1; BYTE: 'INPUT',0; WORD: INPUT; BYTE: 'PRINT',0; WORD: PRINT; BYTE: 'STOP',0 WORD: STOP; BYTE: 'CALL',0; Word: CALL1; BYTE: 'OUTC',0; WORD: OUTCHAR; BYTE: 'OUT',0; WORD: OUT1; BYTE: 'O$',0; WORD: OO; BYTE: 'I$',0; WORD: II; BYTE: 'POKE',0 ; WORD: POKE; BYTE: 'TAB',0; WORD: TAB; BYTE: 'BYTE',0; WORD: BYTE1; BYTE: 'WORD',0; WORD: WORD1; BYTE: O; WORD: DEFLT; TAB4: BYTE: 'RND',0; WORD: RND; BYTE: 'ABS',0; WORD ABS1; BYTE: 'SIZE',0; WORD: SIZE, BYTE: 'PEEK',0; WORD: PEEK; BYTE: 'INC',0; WORD: INCHAR; BYTE: 'HEX',O, WORD: HEX; BYTE: 'IN',0; WORD: IN1; BYTE: 27H,0, WORD: QUOTE; BYTE: 'TOP',0; WORD: TOP; BYTE: 'LEN',0; WORD: LENGTH; BYTE: 'CSTS',0; WORD: CSTAT; BYTE: O; WORD: XP40; TAB5: BYTE: 'TO',0; WORD: FR1; BYTE: O; WORD: QWHAT; TAB6: BYTE: 'STEP',0; WORD: FR2; BYTE: O; WORD: FR3; TAB8: BYTE: '>=',0; WORD: XP11; BYTE: '#',0; WORD: XP12; BYTE: '>,0; WORD: XP13; BYTE: '=',0; WORD: XP15; BYTE: '<=',0; WORD: XP14; BYTE: '&1t;',0; WORD: XP16; BYTE: Q; WORD XP17; %**************** % DIRECT MODULE * %**************** DIRECT: LD R4,^TAB1-1; EXEC: EX0: CALR IGNB; PUSH R15^,R5; EX1: LDB RL1,R5^; INC R5,1; CPB RL1,'.'; JR ZR,EX3; INC R4,1; CPB RL1,R4^; JR ZR,EX1; CLRB RL1; DEC R5,1; CPB RL1,R4^; JP ZR,EX5; EX2: INC R4,1; CPB RL1,R4^; JR NZ,EX2; INC R4,2; JR EE0; EX3: CLRB RL1; EX4: INC R4,1; CPB RL1,R4^; JR NZ,EX4;; EX5: INC R4,1; LDB RH0,R4^; INC R4,1; LDB RLO,R4^; POP R1,R15^; JP R0^; %*********** % END EXEC * %*********** % EINZELNE ROUTINEN CXBUFE; LD R0,BUFEND; CPB RL1,RL0; RET; CXBUFA: LD R0,BUFFER; CPB RL1,RL0; RET; END1: CALR EXPR; LD R5,^TXTE; CP R4,R5; JP CY,ASORRY; ORB RH4,RH4; JP MI;ASORRY; LD R0,R4^; COM R4^; COM R0; CP R0,R4^; JP NZ,ASORRY; LD BUFEND,R4^; SUB R4,132; LD BUFFER,R4; DEC R4,2; LD TXTEND,R4; JP RSTART; BYE: SC 255; JP RSTART; CALL1: CALR EXPR; PUSH R15^,R5; LD R6,^HERE; PUSH R15^,R6; JP R4^; HERE: POP R5,R15^; CALR FINI; OUT1: % NUR IN SYS MODE CALR PARN; PUSH R15^,R1; TESTC '='RSV0; CALR EXPR; POP R0,R15^; OUT R0^,R4; CALR FINI; RSV0: JP QWHAT; TAB; CALR PARM; A1: OR JR NZ,SK4; CALR FINI; SK4: DEC R4,1; LDB RL1,' '; CALR OUTC; INI: CALR PARN; LD R0,R4; IN R4,R0^; RET; OO: CALR EXPR; PUSH R15^,R5; EX R4,R5; CLR R1; CALL PRTSTG; POP R5,R15^; CALR FINI; II: CALR EXPR; PUSH R15^,R5; LD R5,TXTUNF; CP R4,R5; JP CY,ASORRY; LD R5,BUFFER; CALR GL1; LD R6,R4; EX R4,R5; DEC R4,1; LD R5,BUFFER; PUSH R15^,R5; CALR MVUP; CLRB R6^; POP R5,R15^; INC R4,1; SUB R4,R5; EX R4,R5; LD R4,^LEGT; LDB R4^,RL5; INC R4,1; LDB R4^,RH5; POP R5,R15^; CALR FINI; PEEK: CALR PARN; LDB RL4,R4^; CLRB RH4; RET; POKE: CALR EXPR; PUSH R15^,R4^; TESTC '.',PK1; CALR EXPR; LDB RL1,RL4; POP R4,R15^; LDB R4^,RL1; CALR FINI; PK1; JP QWHAT; BYTE1: CALP PARN; LDB RL1,RL4; CALR WRIT2; CALR FINI; WORD1: CALR PARN; LDB RL1,RH4; CALR WRIT2; LDB RL1,RL4; CALR WRIT2; CALR FINI; WRIT2: PUSH R15^,R1; CALR IST; POP R1,R15^; IST; ANDB RL1,0FH; ADDB RL1,90H; DAB RL1; LDB RL0,4OH; ADCB RL1,RL0; DAB RL1; JP OUTC; CSTAT: CALL CSTS; LDB RL4,RL1; CLRB RH4; RET; QUOTE: LDB RL1,R5^; INC R5,1; LDB RL4,RL1; CLRB RH4; TESTC 27H,ASCI; RET; ASCI: JP QWHAT; TOP: LD R4,TXTUNF; INC R4,1; RET; LENGTH: LD R4,LEGT; DEC R4,1; RET; OUTCHAR ; CALR EXPR; LDB RL1,RL4; CALL OUTC; CALR FINI; INCHAR: CALR CHKIO; LDB RL4,RL1; CLRB RH4; RET; HEX: PUSH R15^,R6; CLR R4; TESTC '(',HN2; HNXTH: LDB RL1,R5^; CPB RL1,0DH; JP ZR,QWHAT; CALR CNVBN; SLA R4,4; CLRB RH1; ADD R4,R1; INC R5,1; TESTC ')’,HNXTH; POPRET; P0P R6,R15^; RET; HN2: JP QWHAT; CNDBN: CPB RL1,'0'; JP M1,QWHAT; CPB RL1,'9'; JR M1,CONTC; JR ZR,CONTC; CPB RL1,'A'; JP M1,QWHAT; CPB RL1,'C; JP PL,QWHAT; CONTC: SUBB RL1,'0'; CPB RL1,1O; RET MI; BUBB RL1,7; RET; CONT: CALL CSTS; OR R1,R1 % FLAGB RET ZR; CALL CI; CPB RL1-3; RET NZ; JP RSTART; ORIGIN ;1000H^; % SPEICHFRZKLLEN LEGT: WORD (1); IOBUFA: BYTE (1); IOBUFB: BYTE (1); IOBUFC: BYTE (1); LSTROM: BYTE (1); OCSW: BYTE (1); NOPNOP: BYTE (1); CURRNT: WORD (1); STKGOS: WORD (1); VARNXT: WORD (1); STKINP: WORD (1); LOPVAR: WORD (1); LOPINC: WORD (1); LOPINT: WORD (1); LOPLN: WORD (1); LOPPT: WORD (1); RAMPNT: WORD (1); TXTUNF: WORD (1); WORD (20); STKLMT: WORD (1); WORD (200); STACK: WORD (1); DARBGN: WORD (30); TXTEND: WORD (1); BUFFER: WORD (1); BUFEND: WORD (1); TXTBGN: WORD (1); WORD (300); TXTE: WORD (1); BUFA: BYTE (64); BUFE: BYTE (2); ORIGIN 1E00H^; REGSTO: WORD (16); FCWBTO; WORD (1); PCBTO: WORD (1); INBIRW: WORD (1); END.